<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>正则表达式</title>
</head>

<body>
    <!-- 
        1、什么是正则表达式,有什么用?
            正则表达式是一门独立的学科,基本每个语言都支持。
            正则表达式不是JS专属的。不过在JS中使用居多。
            通常使用正则表达式进行字符串格式匹配。
            
            正则表达式是有一堆特殊的符号组成的一个表达式。
            每一个特殊的符号都有特殊的代表含义。
            
            例如:
                qq号的正则表达式。
                邮箱地址的正则表达式。
                
            邮箱地址格式验证:
                程序中有一个邮箱地址的正则表达式。
                用户输入了一个邮箱地址。
                那么邮箱地址的正则表达式和邮箱地址进行匹配,能匹配成功,表示合法,反之表示不合法。

        2、对于javascript程序员来说,我们对于正则表达式掌握到什么程度呢?
            第一:能够看懂正则表达式
            第二:简单的正则要会写
            第三:要能够独立的从网络当中搜索到你想要的正则表达式(搜索能力要有)
            第四:要会创建JS的正则表达式对象。
            第五:要会调用JS正则表达式对象的方法。
            
        3、常见的正则表达式符号有哪些?
            . 匹配除换行符以外的任意字符
            \w 匹配字母或数字或下划线或汉字
            \s 匹配任意的空白符
            \d 匹配数字
            \b 匹配单词的开始或结束
            ^ 匹配字符串的开始
            $ 匹配字符串的结束
            
            * 重复零次或更多次  0-N次
            + 重复一次或更多次  1-N次 
            ? 重复零次或一次    0或1次
            {n} 重复n次         n次
            {n,} 重复n次或更多次  n+次
            {n,m} 重复n到m次    n到m次
            注意：
                数量永远匹配的都是前面的那个字符出现的次数
            
            \W 匹配任意不是字母,数字,下划线,汉字的字符
            \S 匹配任意不是空白符的字符
            \D 匹配任意非数字的字符
            \B 匹配不是单词开头或结束的位置
            [^×] 匹配除了x以外的任意字符
            [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
            
            | 表示或者

            [a-z]{1} a到z所有的字符中的任意1个。
            
            [a-zA-Z0-9]{3,} 前面这堆中的任意字符至少出现3个

            [1-9][0-9]{4,}  qq号的正则表达式，最小的qq号是10000

            [1-9]     没有指定数量的时候，默认是1个

        4、邮箱的正则表达式:
            ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
            这个邮箱地址从网上找了之后不一定能用，你需要测试。反复测试

        5、在JS中怎么创建正则表达式呢？

            包括两种方式，重点使用第一种

            第一种方式：直接量语句
                var regExp = /正则表达式/标记

            第二种方式：使用内之类RegExp类
                var regExp = new RegExp("正则表达式","标记")

            标记是可选项！！！！都有哪些值可选呢？
                g：全局 global
                i：忽略大小写 ignorecase
                gi：全局扫描，并且忽略大小写
        
        6、正则表达式对象有一个很重要的方法：
            regexp.test(变量)方法 验证变量是否符合regexp返回bool
            var emailRegExp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
            var ok = emailRegExp.test('用户输入的字符串(通过value获得)')
            返回值ok是true表示，匹配成功

            其实在JS中，字符串String也是支持正则表达式的。

 -->
    <script>
        // 字符串对象使用正则表达式
        // replace(RegExp,replace)
        console.log("1980-10-23".replace("-", "/"))
            // g表示global全局的，所有的 - 替换成 /
        console.log("1980-10-23".replace(/-/g, "/"))

        function verify() {
            // 获取文本框数据
            var val = document.getElementById("mytx").value
                // 创建正则表达式对象
            var emailRegExp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
                // 验证 注意test()括号中变量不要加""
            var ok = emailRegExp.test(val)
            if (ok) {
                alert("邮箱地址合法..")
            } else {
                alert("邮箱地址不合法")
            }
        }
    </script>

    邮箱地址：<input type="text" id="mytx">
    <input type="button" value="验证邮箱是否合法" id="mybt" onclick="verify()">

</body>

</html>